% ThemeManager 使用示例
% 
% 此脚本演示如何在不同场景下使用ThemeManager服务
% 
% 作者：MBD Platform Team
% 日期：2025-10-18

%% 示例1：基本使用
% 创建一个简单的GUI并应用主题

% 创建figure
fig = uifigure('Name', '主题管理器示例', 'Position', [100 100 500 400]);

% 创建一些控件
btn1 = uibutton(fig, 'Position', [50 300 100 30], 'Text', '按钮1');
btn2 = uibutton(fig, 'Position', [50 250 100 30], 'Text', '按钮2');
lbl1 = uilabel(fig, 'Position', [50 200 100 30], 'Text', '标签示例');
txt1 = uitextarea(fig, 'Position', [50 50 400 130]);

% 创建ThemeManager并应用深色主题
themeMgr = ThemeManager();
themeMgr.applyTheme(fig, 'dark');

fprintf('✓ 示例1完成：深色主题已应用\n');

%% 示例2：主题切换
% 添加主题切换按钮

% 创建主题切换按钮
themeSwitchBtn = uibutton(fig, 'Position', [200 300 150 30], ...
    'Text', '切换到浅色主题');

% 定义当前主题
currentTheme = 'dark';

% 设置回调函数
themeSwitchBtn.ButtonPushedFcn = @(src, event) switchTheme();

    function switchTheme()
        if strcmp(currentTheme, 'dark')
            themeMgr.applyTheme(fig, 'light');
            currentTheme = 'light';
            themeSwitchBtn.Text = '切换到深色主题';
        else
            themeMgr.applyTheme(fig, 'dark');
            currentTheme = 'dark';
            themeSwitchBtn.Text = '切换到浅色主题';
        end
        
        % 获取统计信息
        stats = themeMgr.getStatistics();
        fprintf('主题切换完成：已应用 %d 个控件，跳过 %d 个控件\n', ...
            stats.AppliedCount, stats.SkippedCount);
    end

fprintf('✓ 示例2完成：主题切换按钮已添加\n');

%% 示例3：排除特定控件
% 某些控件不应用主题

% 创建一个特殊按钮（保持原始颜色）
specialBtn = uibutton(fig, 'Position', [200 250 150 30], ...
    'Text', '特殊按钮（不变色）', ...
    'BackgroundColor', [1 0.5 0], ... % 橙色
    'FontColor', [1 1 1]);
specialBtn.Tag = 'NoTheme'; % 设置Tag以排除

% 重新应用主题
themeMgr.applyTheme(fig, currentTheme);

fprintf('✓ 示例3完成：特殊按钮已排除，保持橙色\n');

%% 示例4：自定义配置文件
% 使用自定义配置创建不同的主题

% 创建自定义主题配置
customConfig = struct();
customConfig.themes.custom.Button.BackgroundColor = '#FF5733'; % 红橙色
customConfig.themes.custom.Button.FontColor = '#FFFFFF';
customConfig.themes.custom.Label.FontColor = '#FF5733';
customConfig.themes.custom.TextArea.BackgroundColor = '#FFF3E0';
customConfig.themes.custom.TextArea.FontColor = '#000000';
customConfig.exclusions.PropertyNames = {};
customConfig.exclusions.Tags = {'NoTheme'};
customConfig.exclusions.ClassNames = {};
customConfig.special_rules.title_labels.enabled = false;
customConfig.special_rules.message_text_areas.enabled = false;
customConfig.options.recursive = true;
customConfig.options.apply_to_menus = false;
customConfig.options.apply_to_toolbars = true;
customConfig.options.verbose = false;
customConfig.options.fallback_on_error = true;
customConfig.options.use_native_theme = true;

% 保存为临时YAML文件
tempConfigPath = fullfile(tempdir, 'custom_theme.yml');
yamlwrite(tempConfigPath, customConfig);

% 使用自定义配置
customThemeMgr = ThemeManager('ConfigPath', tempConfigPath);

fprintf('✓ 示例4完成：自定义主题管理器已创建\n');
fprintf('  可以使用: customThemeMgr.applyTheme(fig, ''custom'')\n');

%% 示例5：详细日志模式
% 查看主题应用的详细过程

fprintf('\n=== 详细日志模式 ===\n');
verboseThemeMgr = ThemeManager('Verbose', true);
verboseThemeMgr.applyTheme(fig, 'light');

%% 示例6：在App Designer中集成
% 以下是在App Designer中使用ThemeManager的示例代码框架

fprintf('\n=== App Designer集成示例 ===\n');
fprintf('在App Designer中，可以这样使用：\n\n');
fprintf('classdef MyApp < matlab.apps.AppBase\n');
fprintf('    properties (Access = private)\n');
fprintf('        ThemeManager    %% ThemeManager实例\n');
fprintf('        CurrentTheme    %% 当前主题名称\n');
fprintf('    end\n\n');
fprintf('    methods (Access = private)\n');
fprintf('        function startupFcn(app)\n');
fprintf('            %% 初始化ThemeManager\n');
fprintf('            app.ThemeManager = ThemeManager(''Verbose'', false);\n');
fprintf('            app.CurrentTheme = ''light'';\n');
fprintf('            app.ThemeManager.applyTheme(app.MainFigure, app.CurrentTheme);\n');
fprintf('        end\n\n');
fprintf('        function ThemeSwitchButtonPushed(app, event)\n');
fprintf('            %% 切换主题\n');
fprintf('            if strcmp(app.CurrentTheme, ''light'')\n');
fprintf('                app.CurrentTheme = ''dark'';\n');
fprintf('            else\n');
fprintf('                app.CurrentTheme = ''light'';\n');
fprintf('            end\n');
fprintf('            app.ThemeManager.applyTheme(app.MainFigure, app.CurrentTheme);\n');
fprintf('        end\n');
fprintf('    end\n');
fprintf('end\n\n');

%% 示例7：性能测试
% 测量主题应用的性能

fprintf('=== 性能测试 ===\n');

% 创建大量控件
numControls = 50;
testFig = uifigure('Name', '性能测试', 'Position', [100 100 600 600]);
for i = 1:numControls
    row = floor((i-1)/5);
    col = mod(i-1, 5);
    uibutton(testFig, 'Position', [20+col*110, 550-row*40, 100, 30], ...
        'Text', sprintf('按钮%d', i));
end

% 测试主题应用时间
perfThemeMgr = ThemeManager('Verbose', false);
tic;
perfThemeMgr.applyTheme(testFig, 'dark');
elapsedTime = toc;

stats = perfThemeMgr.getStatistics();
fprintf('性能测试结果：\n');
fprintf('  - 控件数量: %d\n', stats.TotalCount);
fprintf('  - 已应用: %d\n', stats.AppliedCount);
fprintf('  - 已跳过: %d\n', stats.SkippedCount);
fprintf('  - 耗时: %.3f 秒\n', elapsedTime);
fprintf('  - 平均速度: %.1f 控件/秒\n', stats.AppliedCount/elapsedTime);

%% 清理
fprintf('\n=== 示例完成 ===\n');
fprintf('所有示例窗口将在5秒后关闭...\n');
pause(5);

% 关闭所有示例窗口
close(fig);
close(testFig);

% 删除临时配置文件
if exist(tempConfigPath, 'file')
    delete(tempConfigPath);
end

fprintf('✓ 清理完成\n');

